// 导入用户集合构造函数
const { User } = require('../../model/user');
// 引入bcrypt模块
const bcrypt = require('bcrypt');

module.exports = async (req, res) => {
    // 接受请求参数
    // res.send(req.body);
    // 参数拿过来，要对请求参数做二次验证
    const { email, password } = req.body;
    // 如果用户没有输入邮件地址,组织程序向下进行，
    if (email.trim().length == 0 || password.trim().length == 0) {
        // send()方法自动把http状态码设置为200，终止运行用return
        return res.status(400).render('admin/error', { msg: '邮件或者密码错误' });
    }
    // 根据邮箱地址查询用户信息
    // 如果查询到了用户  user变量的值是对象类型 对象中存储的是用户信息
    // 如果没有查询到用户 user的变量为空
    let user = await User.findOne({ email: email });
    if (user) {

        // 将客户端传递过来的密码和用户信息中的密码进行比对
        // true 比对成功
        // false 比对失败
        let isValid = await bcrypt.compare(password, user.password);
        // 如果密码比对成功
        if (isValid) {
            // 将用户名存储在请求对象中
            req.session.username = user.username;
            // res.send('登录成功');
            // 响应对象req  里会有app属性，所以直接利用req来调用app
            // 给app下面的locals一个属性userInfo 属性值为user
            req.app.locals.userInfo = user;
            // 利用redirect进行重新向 到用户列表页面
            res.redirect('/admin/user')
        } else {
            res.status(400).render('admin/error', { msg: '邮箱地址或者密码错误' });
        }
    } else {
        // 没有查询到用户
        res.status(400).render('admin/error', { msg: '邮箱地址或者密码错误' });
    }

}
